/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jsf;

import bean.RptPensionesMaternal;
import ejb.RptPensionesMaternalFacade;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import util.Encrypt;

/**
 *
 * @author cesardoncel
 */
@ManagedBean(name = "administracion")
@SessionScoped
public class Administracion {
    private String usuario;
    private String password;
    private String ip;
    private String documento;
    
    private boolean aut = false;
    private boolean isDescarga = false;
    
    @EJB
    RptPensionesMaternalFacade facade;
    
    public String ingreso() throws  InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, 
                                    NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, 
                                    UnsupportedEncodingException { 
   //AUTENTICACIÓN MEDIANTE WEB SERVICE
        ws.client.login.LoginWLService loginWS = new ws.client.login.LoginWLService();
        ws.client.login.LoginWL port = loginWS.getLoginWLPort();
        aut = false;
        if (usuario != null && !"".equals(usuario) && password != null && !"".equals(password)){
            if (leerArchivo()){// CAMBIO PARA AGREGAR EL ARCHIVO DE TEXTO
                try {
                    String[] dat = Encrypt.encrip(usuario, password);
                    aut = port.authEnc(dat[0], dat[1]);   
                    
                } catch (Exception ex) {
                    Logger.getLogger(Administracion.class.getName()).log(Level.SEVERE, null, ex);
                    ex.printStackTrace();
                }    
            } else {
                System.err.println("usuario sin permisos");
             //   JsfUtil.addErrorMessage("No tiene permisos");
            return null;
            }
        } else {
            System.err.println("Debe ingresar el correo y la contraseña");
            //JsfUtil.addErrorMessage("Debe ingresar el correo y la contraseña");
            return null;
        }
         if (aut) {
            HttpServletRequest origRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
            ip = origRequest.getRemoteAddr();
            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            String sessionId = session.getId();
            ip += " - " + sessionId;
            System.out.println("usuario ingresado: " + usuario + " - IP: " +  ip);  
             } else {
            System.out.println("Correo y/o contraseña incorrecta");
            //JsfUtil.addErrorMessage("Correo y/o contraseña incorrecta");
            //return null;
        }      
        return null; 
    }
    
     public String logout() {
        aut = false;
        FacesContext ctx = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) ctx.getExternalContext().getSession(false);
        System.out.println("cerrando sesion: " + usuario);
        setUsuario(null);
        setPassword(null);        
        System.out.println("logout");        
        session.invalidate();                
        return "logout";
    }
     

    /**
     * @return the usuario
     */
    public String getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the ip
     */
    public String getIp() {
        return ip;
    }

    /**
     * @param ip the ip to set
     */
    public void setIp(String ip) {
        this.ip = ip;
    }

    /**
     * @return the aut
     */
    public boolean isAut() {
        return aut;
    }

    /**
     * @param aut the aut to set
     */
    public void setAut(boolean aut) {
        this.aut = aut;
    }
    
     public Boolean leerArchivo(){
        try{
            boolean salida = false;
           // superAdmin = false;           
           /* File file1 = new File("pepe.txt");
            file1.createNewFile();
            System.out.println("ruta archivo: "+file1.getAbsolutePath());
            
            BufferedWriter out = new BufferedWriter(new FileWriter(file1, true));
            out.write("linea de texto");
            out.close();            
            file1.delete();*/
                      
            File file = new File("usrEscuela.txt");           
//          File file = new File("/opt/glassfish3/glassfish/domains/domain1/usuarios.txt");
            
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            String lineas = "";
            while ((lineas = br.readLine()) != null){
                if (usuario.equals(lineas)){                    
                    salida = true;                   
                } 
                System.out.println(lineas);
            }
            return salida;
        } catch (IOException ioe){
            System.err.println("ERROR AL INTENTAR LEER EL ARCHIVO");
             
            return false;
        }
    }
     
    public void prepareDescarga(){
        setIsDescarga(true);
    }
    
    public void descargaRecibo(){
        System.out.println("Documento ingresado: " + documento);
        List<RptPensionesMaternal> registros = facade.findByDocEstudiante(documento);
        if (registros != null && registros.size()>0){
            FacesContext context = FacesContext.getCurrentInstance();
            String baseURL = context.getExternalContext().getRequestContextPath();
            String url = baseURL + "/GenerarRecibo?documento=" + documento;
            try { 
                context.getExternalContext().redirect(url);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                context.responseComplete();
            }
        } else {
            jsf.util.JsfUtil.addErrorMessage("No se encontraron registros para este documento");
        }
    }
    
    public void volverDescarga(){
        setIsDescarga(false);
    }

    /**
     * @return the isDescarga
     */
    public boolean isIsDescarga() {
        return isDescarga;
    }

    /**
     * @param isDescarga the isDescarga to set
     */
    public void setIsDescarga(boolean isDescarga) {
        this.isDescarga = isDescarga;
    }

    /**
     * @return the documento
     */
    public String getDocumento() {
        return documento;
    }

    /**
     * @param documento the documento to set
     */
    public void setDocumento(String documento) {
        this.documento = documento;
    }
    
}
